////////////////////////////////////////////////
// DESCRIPTION:
//    Support classes for generating documentation
//
// Legal Notices:
//   Copyright (c) 2008, Telliam Consulting, LLC.
//   All rights reserved.
//
//   Redistribution and use in source and binary forms, with or without modification,
//   are permitted provided that the following conditions are met:
//
//   * Redistributions of source code must retain the above copyright notice, this list
//     of conditions and the following disclaimer.
//   * Redistributions in binary form must reproduce the above copyright notice, this
//     list of conditions and the following disclaimer in the documentation and/or other
//     materials provided with the distribution.
//   * Neither the name of Telliam Consulting nor the names of its contributors may be
//     used to endorse or promote products derived from this software without specific
//     prior written permission.
//
//   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
//   EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
//   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
//   SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
//   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
//   TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
//   BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
//   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
//   ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
//   DAMAGE. 
//
using System;
using System.Xml;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace FusionWare.Sandcastle.Components
{
    internal partial class MSHelpAttrConfigDlg : Form
    {
        public MSHelpAttrConfigDlg(string XmlText)
        {
            InitializeComponent();
            this._Config = new XmlDocument();
            this._Config.LoadXml(XmlText);

            XmlNodeList mshelpAttrs = this._Config.SelectNodes("//MSHelpAttr");
            foreach(XmlNode attr in mshelpAttrs)
               this.dataGridView1.Rows.Add(attr.Attributes["Name"].Value, attr.Attributes["Value"].Value);
        }

        protected override void OnClosed(EventArgs e)
        {
            base.OnClosed(e);
            
            if(this.DialogResult != DialogResult.OK)
                return; 

            XmlNode component = this._Config.SelectSingleNode("//component");

            XmlNodeList docsets = component.SelectNodes("//MSHelpAttr");
            foreach(XmlNode docset in docsets)
                component.RemoveChild(docset);

            foreach(DataGridViewRow row in this.dataGridView1.Rows)
            {
                if(!row.IsNewRow)
                {
                    XmlNode node = this._Config.CreateNode(XmlNodeType.Element, "MSHelpAttr", string.Empty);
                    component.AppendChild(node);

                    XmlAttribute nameAttr = this._Config.CreateAttribute("Name");
                    nameAttr.Value = row.Cells[this.NameColumn.Index].Value as string;

                    XmlAttribute valueAttr = this._Config.CreateAttribute("Value");
                    valueAttr.Value = row.Cells[this.ValueColumn.Index].Value as string;

                    node.Attributes.Append(nameAttr);
                    node.Attributes.Append(valueAttr);
                }
            }
        }

        public XmlDocument Config
        {
            get { return _Config; }
        }
        private XmlDocument _Config;
    }
}